<?php

class planilhaTask extends sfBaseTask
{
	protected function configure()
	{
		// // add your own arguments here
		// $this->addArguments(array(
		//   new sfCommandArgument('my_arg', sfCommandArgument::REQUIRED, 'My argument'),
		// ));

		$this->addOptions(array(
			new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name'),
			new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
			new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'doctrine'),
			// add your own options here
		));

		$this->namespace        = 'importar';
		$this->name             = 'planilha';
		$this->briefDescription = 'Tarefa para importar a planilha de cadastro';
		$this->detailedDescription = <<<EOF
The [planilha|INFO] task does things.
Call it with:

  [php symfony planilha|INFO]
EOF;
	}

	protected function execute($arguments = array(), $options = array())
	{
		// initialize the database connection
		$databaseManager = new sfDatabaseManager($this->configuration);
		$connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection();

		// add your code here
		echo "Carregando a planilha.". PHP_EOL;
		$data = file(sfConfig::get('sf_upload_dir').'/planilha.csv');

		if(count($data))
		{
			$contador = 0;
			$test = array_shift($data);
			$total = count($data);
			
			$array_usuario = array();
			
			foreach($data as $item)
			{
				try {
					$item = explode(';', $item);
					$formData = new FormData($item, true);
					$formData->setCulture('pt_BR');
					
					// atribuo os valores para o usuario para poder validar
					$usuario = new Usuario();
					$usuario->set('prontuario', 		strtoupper($formData->get('0')));
					$usuario->set('nome', 				($formData->get('1') != '')? strtoupper($formData->get('1')) : '--');
					$usuario->set('data_nascimento', 	$formData->get('2', FormData::DATE));
					$usuario->set('endereco', 			strtoupper($formData->get('3')));
					$usuario->set('regiao', 			strtoupper($formData->get('4')));
					$usuario->set('situacao',			Util::verificarSituacao($formData->get('5')));
					$usuario->set('uf',					$formData->get('6'));						
					$usuario->set('observacao', 		strtoupper($formData->get('7') . $formData->get('8')));
					
					// verifico se o usuario está valido com os dados informados
					if($usuario->isValid())
					{
						// verifico se já tem um usuario com o prontuario informado
						$usuario->save();
						
						if($chave = array_search($formData->get('0'), $array_usuario)){
							$usuario->set('id_usuario_pai',	$array_usuario[$chave]['id']);
							$usuario->save();
						}
						
						$array_usuario[$contador]['id'] = $usuario['id_usuario'];
						$array_usuario[$contador]['p'] = $usuario['prontuario'];
						
						$usuario->free(true);
						unset($usuario);
						
						$contador++;
					}
										
				} catch(Exception $e) {
					echo "Escrevendo no arquivo de erro". PHP_EOL;
					$arquivo_erro = fopen(sfConfig::get('sf_upload_dir').'/erro_importacao.txt', 'a+');
					fwrite($arquivo_erro, "\n".$formData->get('0') . " - " . $e->getMessage() . "\n" . PHP_EOL);
					fclose($arquivo_erro);
					continue;
				}
			}
			$collection->save();
				
			if($contador == $total)
				echo 'Dados importados com sucesso. Total de ' . $contador . ' de ' . $total;
			elseif($contador != 0 && $contador != $total) 
				echo 'Dados importados com sucesso. <br /> Total de ' . $contador . ' de ' . $total;
			else 
				echo 'Nenhum registro foi importado. <br /> Verifique se os dados estão duplicados.';
		}
	}
}
